home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / rpncal / calc.txt < prev    next >
Text File  |  1993-05-09  |  4KB  |  141 lines

  1. ' ------------------------------------------------------------------------
  2. '               Copyright (C) 1991 Microsoft Corporation
  3. '
  4. ' You have a royalty-free right to use, modify, reproduce and distribute
  5. ' the Sample Application Files (and/or any modified version) in any way
  6. ' you find useful, provided that you agree that Microsoft has no warranty,
  7. ' obligations or liability for any Sample Application Files.
  8. ' ------------------------------------------------------------------------
  9. Option Explicit
  10. Dim Op1, Op2                ' Previously input operand.
  11. Dim DecimalFlag As Integer  ' Decimal point present yet?
  12. Dim NumOps As Integer       ' Number of operands.
  13. Dim LastInput               ' Indicate type of last keypress.
  14. Dim OpFlag                  ' Indicate pending operation.
  15. Dim TempReadout
  16.  
  17. ' Click event procedure for C (cancel) key.
  18. ' Reset the display and initializes variables.
  19. '
  20. Sub Cancel_Click ()
  21.     ReadOut = "0."
  22.     Op1 = 0
  23.     Op2 = 0
  24.     Form_Load
  25. End Sub
  26.  
  27. ' Click event procedure for CE (cancel entry) key.
  28. '
  29. Sub CancelEntry_Click ()
  30.     ReadOut = "0."
  31.     DecimalFlag = False
  32.     LastInput = "CE"
  33. End Sub
  34.  
  35. ' Click event procedure for decimal point (.) key.
  36. ' If last keypress was an operator, initialize
  37. ' readout to "0." Otherwise, append a decimal
  38. ' point to the display.
  39. '
  40. Sub Decimal_Click ()
  41.     If LastInput = "NEG" Then
  42.     ReadOut = "-0."
  43.     ElseIf LastInput <> "NUMS" Then
  44.     ReadOut = "0."
  45.     End If
  46.     DecimalFlag = True
  47.     LastInput = "NUMS"
  48. End Sub
  49.  
  50. ' Initialization routine for the form.
  51. ' Set all variables to initial values.
  52. '
  53. Sub Form_Load ()
  54.     DecimalFlag = False
  55.     NumOps = 0
  56.     LastInput = "NONE"
  57.     OpFlag = " "
  58. End Sub
  59.  
  60. ' Click event procedure for number keys (0-9).
  61. ' Appends new number to the number in the display.
  62. '
  63. Sub Number_Click (Index As Integer)
  64.     If LastInput <> "NUMS" Then
  65.     ReadOut = "."
  66.     DecimalFlag = False
  67.     End If
  68.     If DecimalFlag Then
  69.     ReadOut = ReadOut + Number(Index).Caption
  70.     Else
  71.     ReadOut = Left(ReadOut, InStr(ReadOut, ".") - 1) + Number(Index).Caption + "."
  72.     End If
  73.     If LastInput = "NEG" Then ReadOut = "-" & ReadOut
  74.     LastInput = "NUMS"
  75. End Sub
  76.  
  77. ' Click event procedure for operator keys (+, -, x, /, =).
  78. ' If the immediately preceeding keypress was part of a
  79. ' number, increment NumOps. If one operand is present,
  80. ' set Op1. If two are present, set Op1 equal to the
  81. ' result of the operation on Op1 and the current
  82. ' input string, and display the result.
  83. '
  84. Sub Operator_Click (Index As Integer)
  85.     TempReadout = ReadOut
  86.     If LastInput = "NUMS" Then
  87.     NumOps = NumOps + 1
  88.     End If
  89.     Select Case NumOps
  90.     Case 0
  91.     If Operator(Index).Caption = "-" And LastInput <> "NEG" Then
  92.         ReadOut = "-" & ReadOut
  93.         LastInput = "NEG"
  94.     End If
  95.     Case 1
  96.     Op1 = ReadOut
  97.     If Operator(Index).Caption = "-" And LastInput <> "NUMS" And OpFlag <> "=" Then
  98.         ReadOut = "-"
  99.         LastInput = "NEG"
  100.     End If
  101.     Case 2
  102.     Op2 = TempReadout
  103.     Select Case OpFlag
  104.         Case "+"
  105.         Op1 = Val(Op1) + Val(Op2)
  106.         Case "-"
  107.         Op1 = Op1 - Op2
  108.         Case "X"
  109.         Op1 = Op1 * Op2
  110.         Case "/"
  111.         If Op2 = 0 Then
  112.            MsgBox "Can't divide by zero", 48, "Calculator"
  113.         Else
  114.            Op1 = Op1 / Op2
  115.         End If
  116.         Case "="
  117.         Op1 = Op2
  118.         Case "%"
  119.         Op1 = Op1 * Op2
  120.         End Select
  121.     ReadOut = Op1
  122.     NumOps = 1
  123.     End Select
  124.     If LastInput <> "NEG" Then
  125.     LastInput = "OPS"
  126.     OpFlag = Operator(Index).Caption
  127.     End If
  128. End Sub
  129.  
  130. ' Click event procedure for percent key (%).
  131. ' Compute and display a percentage of the first operand.
  132. '
  133. Sub Percent_Click ()
  134.     ReadOut = ReadOut / 100
  135.     LastInput = "Ops"
  136.     OpFlag = "%"
  137.     NumOps = NumOps + 1
  138.     DecimalFlag = True
  139. End Sub
  140.  
  141.